Today's computer operating systems (O/S) utilize multitasking schedulers to give the appearance of more than one computer job (e.g., process) running at the same time. There are many different scheduling algorithms, but generally the concept is that a small time slice known as a quantum is given to one thread of a process and then another thread of the process or another process, etc. The length of the quantum is very small, typically in the range of 20 to 120 milliseconds. Due to the human perception of time, it appears that the jobs are running concurrently.
The central processing unit (CPU) tends to be the fastest component of most computer systems, while other computer resources such as disk I/O, network I/O, and even memory tend to be much slower. For example, disk I/O may be about a million times slower than the CPU if measured in terms of data transfer from the disk and data transfer within the CPU. As a result, the CPU often waits for these slower resources. For example, a three-gigahertz CPU often sits idle while waiting for a disk drive to retrieve data at an average access time measured in milliseconds.
Since several different jobs are often vying for the same resources, jobs often collide with each other, which results in the slowing of one or more of the jobs. From a user's perspective, job collisions manifest themselves as unresponsive applications, jerky cursor movement and slowly rendered graphics.
Throttling is a technique for minimizing these negative impacts. Throttling prevents an application or job from using more than an allocated amount of resources. Types of throttling include disk I/O throttling, CPU throttling and network throttling. For example, CPU throttling can involve establishing a target CPU utilization limit for an application and forcing the application to stop working if the application exceeds the target limit. Throttling is sometimes applied to computer resources for maintenance applications or less important computer jobs. While throttling has benefits, the computer job's resource use is not totally transparent to other jobs and applications.
The above problems are even more perplexing because computer resources are generally wasted over a 24-hour period. For example, most desktops utilize less than five percent of the computer's available resources, and high traffic servers often utilize around 20 percent. Even computers that utilize 80-90 percent of resources still have 10-20 percent of resources available.
To recover and utilize these otherwise lost resources, what is needed is a technique that allows one or more jobs to execute in a computer system without significantly impacting other jobs or applications. The technique should not consume a user's time in scheduling the job nor should it negatively impact the user's interaction with the computer system when the job is running.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.